/**
 * File Name	: FixedFSpec.h
 * Location		: /Data/
 * Lib.Name		: Data.a
 * Designer		: OS (12-09-06)
 */

#pragma once

#include "DataField.h"

namespace Core
{
	/**
	 * Kelas pembungkus kumpulan Data Field, dengan Daftar Isi
	 */
	class FixedFSpec : public DataField
	{
	protected:
		std::vector<DataField*>	m_DataItems;

	public:
		/**
		 * Konstruktor yang meminta number of DataField
		 */
		FixedFSpec();

		/**
		 * Destruktor
		 */
		virtual ~FixedFSpec();

		virtual void Init();

		/**
		 * Mereset FRN dan semua isinya menjadi default
		 */
		virtual void Reset();

		/**
		 * Mengartikan Raw Data menjadi kelas entitas
		 * @param p_Data Raw Data yang akan diartikan
		 */
		virtual void ReadRawData(Core::RawData& p_Data);

		/**
		 * Menuliskan entitas ke Raw Data
		 * @param p_Data Raw Data tempat entitas akan menuliskan
		 */
		virtual void WriteRawData(Core::RawData& p_Data);

		std::vector<DataField*>& GetDataItems();

		virtual void ReadJSON(Json::Value& pValue);
		virtual void WriteJSON(Json::Value& pValue);
	};
}
